home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / formats / iff / newiff.lzh / NewIFF / NewIFF.lzh / newiff / iffp / iff.h < prev    next >
C/C++ Source or Header  |  1992-05-18  |  4KB  |  175 lines

  1. /* 
  2.  *
  3.  * iff.h:    General Definitions for IFFParse modules
  4.  *
  5.  * 10/20/91
  6.  */
  7.  
  8. #ifndef IFFP_IFF_H
  9. #define IFFP_IFF_H
  10.  
  11. #include "iffp/compiler.h"
  12.  
  13. #ifndef EXEC_TYPES_H
  14. #include <exec/types.h>
  15. #endif
  16. #ifndef EXEC_MEMORY_H
  17. #include <exec/memory.h>
  18. #endif
  19. #ifndef UTILITY_TAGITEM_H
  20. #include <utility/tagitem.h>
  21. #endif
  22. #ifndef UTILITY_HOOKS_H
  23. #include <utility/hooks.h>
  24. #endif
  25. #ifndef LIBRARIES_IFFPARSE_H
  26. #include <libraries/iffparse.h>
  27. #endif
  28.  
  29. #include <stdio.h>
  30. #include <stdlib.h>
  31. #include <string.h>
  32.  
  33. #ifndef MYDEBUG_H
  34. #include "iffp/debug.h"
  35. #endif
  36.  
  37.  
  38. #ifndef NO_PROTOS
  39. #include <clib/exec_protos.h>
  40. #include <clib/utility_protos.h>
  41. #include <clib/iffparse_protos.h>
  42. #endif
  43. #ifndef NO_SAS_PRAGMAS
  44. extern struct Library *SysBase;
  45. #include <pragmas/exec_pragmas.h>
  46. extern struct Library *IFFParseBase;
  47. #include <pragmas/iffparse_pragmas.h>
  48. extern struct Library *DOSBase;
  49. #include <pragmas/dos_pragmas.h>
  50. #endif
  51.  
  52. #ifndef MAX
  53. #define    MAX(a,b)    ((a) > (b) ? (a) : (b))
  54. #endif
  55. #ifndef MIN
  56. #define    MIN(a,b)    ((a) < (b) ? (a) : (b))
  57. #endif
  58. #ifndef ABS
  59. #define    ABS(x)        ((x) < 0 ? -(x) : (x))
  60. #endif
  61.  
  62. /* Locale stuff */
  63. #include "iffp/iffpstringids.h"
  64.  
  65. #ifndef TEXTTABLE_H
  66. struct AppString
  67. {
  68.     LONG   as_ID;
  69.     STRPTR as_Str;
  70. };
  71. #endif
  72.  
  73. extern struct  AppString AppStrings[];
  74. #define SI(i)  GetString(i)
  75.  
  76.  
  77. #define CkErr(expression)  {if (!error) error = (expression);}
  78. #define ChunkMoreBytes(cn)    (cn->cn_Size - cn->cn_Scan)
  79. #define IS_ODD(a)        (a & 1)
  80.  
  81. #define IFF_OKAY    0L
  82. #define    CLIENT_ERROR    1L
  83. #define NOFILE          5L
  84.  
  85. #define message printf
  86.  
  87. /* Generic Chunk ID's we may encounter */
  88. #define    ID_ANNO        MAKE_ID('A','N','N','O')
  89. #define    ID_AUTH        MAKE_ID('A','U','T','H')
  90. #define    ID_CHRS        MAKE_ID('C','H','R','S')
  91. #define    ID_Copyright    MAKE_ID('(','c',')',' ')
  92. #define    ID_CSET        MAKE_ID('C','S','E','T')
  93. #define    ID_FVER        MAKE_ID('F','V','E','R')
  94. #define    ID_NAME        MAKE_ID('N','A','M','E')
  95. #define ID_TEXT        MAKE_ID('T','E','X','T')
  96. #define ID_BODY        MAKE_ID('B','O','D','Y')
  97.  
  98.  
  99. /* Used to keep track of allocated IFFHandle, and whether file is
  100.  * clipboard or not, filename, copied chunks, etc.
  101.  * This structure is included in the beginning of every
  102.  * form-specific info structure used by the example modules.
  103.  */
  104. struct ParseInfo {
  105.     /* general parse.c related */
  106.     struct  IFFHandle *iff;        /* to be alloc'd with AllocIFF */
  107.     UBYTE    *filename;        /* current filename of this ui */
  108.     LONG    *propchks;        /* properties to get */
  109.     LONG    *collectchks;        /* properties to collect */
  110.     LONG    *stopchks;        /* stop on these (like BODY) */
  111.     BOOL    opened;            /* this iff has been opened */
  112.     BOOL    clipboard;        /* file is clipboard */
  113.     BOOL    hunt;            /* we are parsing a complex file */
  114.     BOOL    Reserved1;        /* must be zero for now */        
  115.  
  116.     /* for copychunks.c - for read/modify/write programs
  117.      * and programs that need to keep parsed chunk info
  118.      * around after closing file.
  119.      * Deallocated by freechunklist();
  120.      */
  121.     struct Chunk *copiedchunks;
  122.  
  123.     /* application may hang its own list of new chunks here
  124.      * just to keep it with the frame.
  125.      */
  126.     struct Chunk *newchunks;
  127.  
  128.     ULONG    Reserved[8];
  129.     };
  130.  
  131.  
  132. /*
  133.  * Used by some modules to save or pass a singly linked list of chunks
  134.  */
  135. struct Chunk {
  136.     struct  Chunk *ch_Next;
  137.     long    ch_Type;
  138.     long    ch_ID;
  139.         long    ch_Size;
  140.         void    *ch_Data;
  141. };
  142.  
  143.  
  144. #ifndef NO_PROTOS
  145. /* parse.c */
  146. LONG openifile(struct ParseInfo *pi,UBYTE *filename, ULONG iffopenmode);
  147. void closeifile(struct ParseInfo *pi);
  148. LONG parseifile(struct ParseInfo *pi,LONG groupid,LONG grouptype,
  149.     LONG *propchks,LONG *collectchks,LONG *stopchks);
  150. LONG getcontext(struct IFFHandle *iff);
  151. LONG nextcontext(struct IFFHandle *iff);
  152. LONG currentchunkis(struct IFFHandle *iff, LONG type, LONG id);
  153. LONG contextis(struct IFFHandle *iff, LONG type, LONG id);
  154. UBYTE *findpropdata(struct IFFHandle *iff, LONG type, LONG id);
  155. void initiffasstdio(struct IFFHandle *iff);
  156. LONG chkcnt(LONG *taggedarray);
  157. long PutCk(struct IFFHandle *iff, long id, long size, void *data);
  158.  
  159. /* iffpstrings.c */
  160. UBYTE *openScreenErr(ULONG errorcode);
  161. UBYTE *IFFerr(LONG error);
  162. void OpenStrings(void);
  163. void CloseStrings(void);
  164. UBYTE *GetString(ULONG id);
  165.  
  166. /* copychunks.c */
  167. struct Chunk *copychunks(struct IFFHandle *iff,
  168.                  LONG *propchks, LONG *collectchks, ULONG memtype);
  169. void freechunklist(struct Chunk *first);
  170. struct Chunk *findchunk(struct Chunk *first, long type, long id);
  171. long writechunklist(struct IFFHandle *iff, struct Chunk *first);
  172. #endif /* NO_PROTOS */
  173.  
  174. #endif /* IFFP_IFF_H */
  175.